package poo.agendina;

import java.io.*;

import java.util.*;

public class GestioneAgendina {
	// ambiente globale
	static Agendina agenda = new AgendinaVector();
	static String linea;
	static StringTokenizer st;
	static Scanner sc = new Scanner(System.in);

	public static void main(String[] args) throws IOException {
		System.out.println("Programma Agendina Telefonica");
		comandi();
		ciclo: for (;;) {
			System.out.print(">");
			linea = sc.nextLine();
			st = new StringTokenizer(linea, " ");
			char comando = st.nextToken().charAt(0);
			switch (comando) {
			case 'Q':
				break ciclo;
			case 'A':
				aggiungiNominativo();
				break;
			case 'R':
				rimuoviNominativo();
				break;
			case 'T':
				ricercaTelefono();
				break;
			case 'P':
				ricercaPersona();
				break;
			case 'E':
				mostraElenco();
				break;
			case 'S':
				salva();
				break;
			case 'C':
				carica();
				break;
			default:
				errore();
			}
		}// for
	}// main

	static void aggiungiNominativo() {
		try {
			String cog = st.nextToken().toUpperCase();
			String nom = st.nextToken().toUpperCase();
			String pre = st.nextToken();
			String tel = st.nextToken();
			Nominativo n = new Nominativo(cog, nom, pre, tel);
			agenda.aggiungi(n);
		} catch (Exception e) {
			System.out.println("Dati incompleti");
		}
	}// aggiungiNominativo

	static void comandi() {
		System.out.println();
		System.out.println("Comandi ammessi: ");
		System.out.println("A(ggiungi cog nom pre tel)");
		System.out.println("R(imuovi cog nom)");
		System.out.println("T(elefono cog nom)");
		System.out.println("P(ersona pre tel)");
		System.out.println("S(alva nomefile)");
		System.out.println("C(arica nomefile)");
		System.out.println("Q(uit)");
		System.out.println();
	}// comandi

	static void errore() {
		System.out.println("Comando sconosciuto");
		comandi();
	}// errore

	static void rimuoviNominativo() {
		try {
			String cog = st.nextToken().toUpperCase();
			String nom = st.nextToken().toUpperCase();
			agenda.rimuovi(new Nominativo(cog, nom, "", ""));// creazione
																// nominativo
																// fittizio per
																// ricerca
		} catch (Exception e) {
			System.out.println("Dati incompleti!");
		}
	}// rimuoviNominativo

	static void ricercaTelefono() {
		try {
			String cog = st.nextToken().toUpperCase();
			String nom = st.nextToken().toUpperCase();
			Nominativo n = agenda.cerca(new Nominativo(cog, nom, "", ""));
			if (n == null)
				System.out.println("Nominativo inesistente");
			else
				System.out.println(n.getPrefisso() + "-" + n.getTelefono());
		} catch (Exception e) {
			System.out.println("Dati incompleti");
		}
	}// ricarcaTelefono

	static void ricercaPersona() {
		try {
			String pre = st.nextToken();
			String tel = st.nextToken();
			Nominativo n = agenda.cerca(pre, tel);
			if (n == null)
				System.out.println("Nominativo inesistente");
			else
				System.out.println(n.getCognome() + " " + n.getNome());
		} catch (Exception e) {
			System.out.println("Dati incompleti");
		}
	}// ricercaPersona

	static void mostraElenco() {
		System.out.println(agenda);
	}// mostraElenco

	static void salva() throws IOException {
		String nomeFile = null;
		try {
			nomeFile = st.nextToken();
		} catch (Exception e) {
			System.out.println("Dati incompleti");
			return;
		}
		try {
			agenda.salva(nomeFile);
		} catch (IOException ioe) {
			System.out.println("Errore salvataggio");
		}
	}// salva

	static void carica() throws IOException {
		String nomeFile = null;
		try {
			nomeFile = st.nextToken();
		} catch (Exception e) {
			System.out.println("Dati incompleti");
			return;
		}
		File f = new File(nomeFile);
		if (!f.exists()) {
			System.out.println("File inesistente");
			return;
		}
		try {
			agenda.ripristina(nomeFile);
		} catch (IOException ioe) {
			System.out.println("Nessuna apertura");
		}
	}// carica

	static void quit() throws IOException {
		System.out
				.print("Vuoi salvare il contenuto dell'agenda prima di terminare? (y/n)");
		String yesno = sc.nextLine();
		if (yesno.toLowerCase().equals("y")) {
			String nomeFile = null;
			do {
				try {
					System.out.print("nome file: ");
					nomeFile = sc.nextLine();
				} catch (Exception e) {
					nomeFile = null;
				}
				if (nomeFile == null || nomeFile.length() == 0) {
					System.out.println("Ridare il nome del file");
				}
			} while (nomeFile == null || nomeFile.length() == 0);
			try {
				agenda.salva(nomeFile);
			} catch (IOException ioe) {
				System.out.println("Errore salvataggio");
			}
		}
	}//quit

}// end class

